草庐IT

c++ - 迁移到 c++11

全部标签

C++11 和广义初始化器约定

C++11带来了新的广义初始化器,这很不错。问题:是否有任何用于初始化对象的旧语法被认为已弃用。在C++03中,一个对象可以被初始化为Foobar(x)Foobar=Foo(x)首选选项(1),因为它不涉及拷贝。在C++11中有更多方法:Foobar{x}autobar=Foo{x}对于移动构造函数和赋值运算符,选项(4)也应该没问题。(1)是否被认为已弃用而支持(3)或(4)?此外,在C++03中,规则是所有接受一个参数的构造函数都应该是显式的(复制构造函数除外)。其他构造函数总是显式的。使用广义初始化器,任何构造函数都可以是隐式的。那么新规则是在任何地方显式放置,还是仅在转换会产生

C++11 对模板参数类型的 vector 使用迭代器

这个问题在这里已经有了答案:WhereandwhydoIhavetoputthe"template"and"typename"keywords?(8个答案)关闭6年前。我有一个模板类,其中包含作为模板参数给出的类型的指针vector。我希望能够使用基于范围的迭代来迭代vector的有限部分。我的类包含以下功能:templateclassObjectList{...public://!Beginiterationoveralistofobjectsstd::vector::iteratorbegin();//!Iteratortoonepasttheendofthelistofobjec

c++ - 结构和位域成员排序

这个问题在这里已经有了答案:Doclass/structmembersalwaysgetcreatedinmemoryintheordertheyweredeclared?(6个答案)关闭6年前。a)结构b)位域中成员的顺序是否有保证?换句话说,给定一个结构或位域的某个成员,我是否保证它从结构/位域开始的偏移量不小于它前面的成员的大小之和?举个例子:structS{chara[N];unsignedb:M;charc:O;};c的偏移量是否至少为sizeof(a)+sizeof(b)?

C++11 lambda 和参数包

我遇到的问题与thisquestion基本相同,但不幸的是,唯一发布的答案现在是一个死链接。具体来说,使用VS2013Update4,我试图编译以下代码,但它不合作:templateautoPostWeakTask(constboost::weak_ptr&queue,void(T::*member)(Params...),constboost::weak_ptr&weak)->std::function{return[queue,member,weak](Params&&...params){if(autoqp=queue.lock()){qp->Post([weak,member,

将字符串的一部分移到锚标签中

我有一个通过函数生成的字符串。$string=function();它生成类似的东西:$string='Test(10)';我的问题是,我该如何移动(10)一部分进入锚标签的末端,因此我们有:$string='Test(10)';我想对列表项中的所有锚标签这样做。适当的PHP方法是什么?看答案只是使用srt_replace字符串变量的功能如下:if(strpos($string,"")){$string=str_replace('','',$string);//outputTest'(10)echo$string=str_replace('','',$string);//outputTest(

c++ - 固定大小数组与 alloca(或 VLA)

alloca()何时比通过声明固定大小的数组在堆栈上分配内存更可取?详细信息:众所周知,alloca()是一个有争议的函数。使用不当,会导致堆栈溢出。如果使用得当,它可以通过避免堆分配从紧密循环中缩短几纳秒。在thisquestion关于为什么alloca被认为是不好的,一些HitTest门的答案提倡偶尔使用alloca。另一种从堆栈分配的方法是简单地声明一个固定大小的数组。在HowardHinnant'sstackallocator中的arena类中可以找到此策略的示例。.(该代码当然是C++,但该概念仍然适用于C。)使用alloca与固定大小数组的权衡是什么?什么时候,如果有的话,

c++ - 在 C++11 中为包含 std::tuple 的对象键入删除

假设我有一个通用类Container,它包含任何类型的元组,并且有一个函数templateT&get();返回对元组中元素的引用。我非常简单的实现如下所示:templateclassContainer{std::tuplecontents;public:Container(constTs&...ts):contents(ts...){}templateT&get(){//TypeIndexissomemeta-programmingstructtofindindexofTinTsreturnstd::get::value>(contents);}};有没有什么好的类型删除技术可以在不改

C++11 复制省略号和异常(catch 参数)

在代码审查之后,我们在try/catchblock中遇到了复制elison的问题。阅读此页面后:cppreferenceguide特别是这一段:Whenhandlinganexception,iftheargumentofthecatchclauseisofthesametype(ignoringtop-levelcv-qualification)astheexceptionobjectthrown,thecopyisomittedandthebodyofthecatchclauseaccessestheexceptionobjectdirectly,asifcaughtbyrefer

c++ - 我如何使用 11 位数字

我想在我的变量-number中输入一个11位数字,但我认为没有那么多内存。我尝试使用*number和int*number=newint[100],但它不起作用。我还想在我的变量-name中添加姓名和姓氏,但每次我使用空格时,它也会停止工作。我该如何解决这些问题?#include#includeusingnamespacestd;structNOTE{stringname;intnumber;intbirthday[3];};intmain(){//int*tel=newint[100];//int*ptr=newint;NOTEarr[3];cout>arr[i].name;cout>

C++ 11新特性之可变参数模板

概述        随着C++11标准的发布,C++语言获得了许多强大的新特性,其中一项显著提升灵活性和实用性的创新便是可变参数模板。这一特性极大地扩展了模板在处理不定数量类型或值参数时的能力,为开发者提供了更为强大且灵活的泛型编程工具。工作机制        在C++11之前,模板参数的数量必须是固定的。这意味着,对于那些需要处理任意数量参数的情况,程序员不得不采用一些间接手段,比如:重载函数或模板特化。然而,可变参数模板允许编译时传递任意数量的类型或对象到模板中。        学习C++的人应当对printf非常熟悉,printf的一个特点就是它的参数个数是可变的。而在C++11中,则允